package edu.mercer.sse554.bkp;

/**
 * Log Exception types.<p>
 *
 * Visitor Pattern: Element. Interface for accept in Visitor Pattern.<p>
 *
 * Example usage: replaces repeated logic for evaluating LogLevel setting
 * 	of application, writing stacktrace....Consolidated into visitor.<p>
 *
 * @param <G> - Generic bounded by Object, return from accept. Example: 
 * 	return from logging
 * 
 * @param <V> - Generic unbounded, Visitor
 * 
 * @see BackupErrorLoggingVisitor
 */

public interface VisitableLogging<G extends Object, 
								  V> 
{
	/**
	 * Accept visitor.<p>
	 * 
	 * Logs exception. Returns Boolean if LogLevel permits logging of the 
	 * 	exception.<p>
	 * 
	 * @param visitor - BackupErrorLoggingVisitor concrete visitor
	 * 
	 * @return  Boolean T if error logged
	 */
	
	Boolean accept( BackupErrorLoggingVisitor visitor );

	
	/**
	 * Accept visitor.<p>
	 * 
	 * Generic form of accept. Allows implementation with any visitor.<p>
	 * 
	 * @param visitor - Generic unbounded, Visitor
	 * 
	 * @return  Generic bounded by object, example: return from logging 
	 */
	
	G accept( V visitor );

	
}//interface
